// 初始化时间  --全局使用方法 $initTime(时间戳,类型)
/**
 * 
 * @param {number} timestamp 时间戳(毫秒)
 * @param {number} type 类型  1：年月日  2：年月日时分秒
 * @returns {string}
 */
export function initTime(timestamp, type = 1) {
    // 如果为空或者小于等于0，返回空字符串
    if (!timestamp || timestamp <= 0) return ''

    const date = new Date(timestamp);
    let formattedDateTime = ''
    if (type === 1) {
        // 年月日
        formattedDateTime =
            `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;
    } else if (type === 2) {
        // 年月日时分秒
        formattedDateTime =
            `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')} ${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}:${date.getSeconds().toString().padStart(2, '0')}`;
    }
    return formattedDateTime
}

/**
 * 数字金额转换为中文大写金额
 * @param {number|string} money - 数字金额（支持整数或小数，如 123.45 或 "123.45"）
 * @returns {string} 大写金额字符串
 */
export function numberToChineseMoney(money) {
    // 验证输入有效性
    if (money === null || money === undefined) return "";
    // 转换为数字并处理字符串输入（如 "123.45"）
    const num = parseFloat(money);
    if (isNaN(num) || num < 0 || num > 999999999999.99) {
        return "金额格式错误（需在 0-999999999999.99 范围内）";
    }

    // 定义基础映射关系
    const digitMap = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];
    const unitMap = ["", "拾", "佰", "仟"]; // 个级单位
    const levelMap = ["", "万", "亿", "兆"]; // 数级单位（每4位一级）

    // 分离整数和小数部分（处理到分，四舍五入）
    const integerPart = Math.floor(num * 100); // 放大100倍取整，避免浮点误差
    const yuan = Math.floor(integerPart / 100); // 元部分
    const jiao = Math.floor((integerPart % 100) / 10); // 角部分
    const fen = integerPart % 10; // 分部分

    // 处理整数部分（元）转换
    function convertInteger(n) {
        if (n === 0) return "";
        let result = "";
        let levelIndex = 0; // 数级索引（0：个级，1：万级，2：亿级...）

        while (n > 0) {
            const section = n % 10000; // 取最后4位（一个数级）
            if (section !== 0) {
                // 转换当前数级的4位数字
                let sectionStr = "";
                for (let i = 0; i < 4; i++) {
                    const digit = Math.floor(section / Math.pow(10, 3 - i)) % 10;
                    if (digit !== 0) {
                        sectionStr += digitMap[digit] + unitMap[3 - i];
                    } else {
                        // 处理零：当前位是零且前面有非零数字，且不是末尾零
                        if (sectionStr.length > 0 && sectionStr[sectionStr.length - 1] !== "零") {
                            sectionStr += "零";
                        }
                    }
                }
                // 去除数级内末尾的零，加上数级单位（万、亿等）
                sectionStr = sectionStr.replace(/零+$/, "") + levelMap[levelIndex];
                result = sectionStr + result;
            } else {
                // 当前数级全为零，但更高数级有值时，需保留一个零
                if (result.length > 0 && result[0] !== "零") {
                    result = "零" + result;
                }
            }
            n = Math.floor(n / 10000); // 处理下一个数级
            levelIndex++;
        }

        // 处理特殊情况：拾位为1且是首位（如 10 → 壹拾）
        if (result.startsWith("拾")) {
            result = "壹" + result;
        }
        return result;
    }

    // 转换整数部分
    const yuanStr = convertInteger(yuan);
    // 处理小数部分（角、分）
    let decimalStr = "";
    if (jiao > 0) decimalStr += digitMap[jiao] + "角";
    if (fen > 0) decimalStr += digitMap[fen] + "分";

    // 组合结果
    let finalResult = "";
    if (yuanStr === "" && decimalStr === "") {
        // 金额为0
        finalResult = "零元整";
    } else {
        // 拼接元部分
        finalResult += yuanStr ? yuanStr + "元" : "零元";
        // 拼接小数部分
        if (decimalStr) {
            finalResult += decimalStr;
        } else {
            // 无小数部分时加"整"
            finalResult += "整";
        }
    }

    return finalResult;
}